<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>逻辑运算符</title>
    <script>
        /*
        * 逻辑运算符:
        * &&:与(短路)
        * ||:或(短路)
        * !:非
             *其他类型转为boolean
               * 1:number: 0或NAN为假,其他为真
               * 2:string: 除了空字符串(""),其他都是true
               * 3:null&undefined:都是false
               * 4:对象:所有对象都为true

        * */

        var flag= true;
        document.write(flag+"<br>");
        document.write(!flag+"<br>");

        document.write("<hr>");

        var num= 3;
        var num2= 0;
        var num3= NaN;
        document.write(!!num+"<br>");
        document.write(!!num2+"<br>");
        document.write(!!num3+"<br>");

        document.write("<hr>");

        //在学习了类型转换之后;在书写死循环while(true) 里面的true可以用任意一个不为"0"和"NAN"的值替换
        //   while(3)

        //string
         var str1="abc";
         var str2="";
         document.write(!!str1+"<br>");
         document.write(!!str2+"<br>");

        document.write("<hr>");

        //对象

        var date=new Date();
         document.write(!!date+"<br>")

        document.write("<hr>")


          var obj= null;
          var obj2=new Date();
        /*if (obj !=null){
             //防止空指针异常.代表的就是如果括号里的布尔表达式为true则执行;反之则不执行
        }*/
        //在学习了类型转换之后防止空指针异常代码可以简写为
        if (obj2){
         //这样若括号内为obj,值为null会自动转换false,则不会执行;若为obj2时,会转为一个布尔表达式true,会执行下面代码
        }

        //三元运算符:
          var a=3;
          var b=4;

          var c= a > b ? 1:0;
          // a是否大于b;若是则值为冒号前面的值;反之若不是,值为冒号后面的值
          alert(c)


    </script>
</head>
<body>

</body>
</html>